# 13. 编码跟解码

# 编码跟解码

# 编码表

# ASCII 编码表-(嘛死特)

最早的编码,编码表中只有英文、大小写字母、数字、一些特殊字符

使用8位进制来表示:8位 = 1字节,由一个字节来表示

ascii编码只支持英文,不支持中文

python2默认使用ascii编码

# GBK 国标码

在国标码的编码表中包含了,ASCII 编码和中文常用的编码

使用16位进制来表示:8位 = 1字节,由二个字节来表示

# UNICODE 万国码-(U呢扣特)

在万国码的编码表中包含了全世界所有国家文字的编码

使用32位进制来表示:32位 = 4字节,由四个字节来表示

unicode万国码支持全球所有语言

# utf-8 (对unicode万国码进行压缩)

把unicode万国码表示32位进制,每8位进制为一单位,如果单位没有被使用,就会被压缩掉

utf-8 最少用1字节 = 8位,最多用4字节 = 32位表示

  1. 英文:8bit 1byte,1字节 = 8位
  2. 欧洲文字:16bit 2byte,2字节 = 16位
  3. 中文:24bit 3byte,3字节 = 24位

python3默认使用utf-8编码

# 文件编码

以什么编码保存,就要用什么编码方式打开,否则就会出现乱码

建议:在编写文件时,文件编码要使用utf-8格式

# python2支持utf-8

pythjon2中默认使用的ASCII码,所以不支持中文,如果需要在python2中更改编码,只需要在文件的头部加上一句

# -*- coding:utf-8 -*-

这样python2就把默认使用ascii编码改为utf-8编码

# 使用编码转换

在python3中,内存在程序运行阶段,使用的是unicode编码,因为unicode是万国码,什么内容都可以进行显示,那么在数据传输和存储的时候由于unicode比较浪费空间和资源,需要把unicode转存成UTF-8或GBK进行存储,怎么转换呢,在python中可以把文字信息进行编码,编码之后的内容就可以进行传输了,编码之后的数据是BYTES(bytes)类型,也还是原来的数据只是经过编码之后表现形式发生改变而已

bytes的表现形式:

  1. 英文:b'hello' 英文的表现形式和字符串没什么区别
  2. 中文: b'\xe4\xb8\xad' 这是一个汉字的UTF-8的bytes表现形式

# 编码转换 - encode()

英文编码转换之后的结果和源字符串一致

中文编码转换之后 的结果根据编码的不同,编码结果也不同,一个中文的UTF-8编码是3个字节,一个GBK的中文编码是2个字节,

编码转换之后的类型就是bytes类型

在网络传输和存储的时候,python是保存和存储的bytes类型数据,那么在对方接收的时候,也是接收的bytes类型的数据,就需要使用decode() 来进行解码操作,把bytes类型的数据还原成熟悉的字符串

格式:变量.encode(编码格式) 或 变量 = 变量.encode(编码格式)

英文

s = "holle"
print(s.encode("utf-8"))

执行结果:
b'holle'

​ 以上实例,把变量中的字符串进行转编码,转换成bytes类型的数据

中文

s = "你好"
print(s.encode("utf-8"))

执行结果:
b'\xe4\xbd\xa0\xe5\xa5\xbd'

​ 以上实例,把变量中的字符串进行转编码,转换成bytes类型的数据

# 使用解码转换 - decode()

接收的bytes类型的数据,就需要使用decode() 来进行解码操作,把bytes类型的数据还原成熟悉的字符串

格式:变量.decode(编码格式) 或 变量 = 变量.decode(编码格式)

so = "你好"
wo = so.encode("utf-8")
print(wo)
print(wo.decode("utf-8"))

执行结果:
b'\xe4\xbd\xa0\xe5\xa5\xbd'
你好

​ 以上实例,使用了编码转换跟解码转换的二个函数,简单实现了文件传输的编码转换跟解码转换